package dialect

import (
	"fmt"
	"os"

	"code_gen/config"
)

// JavaFileSaver java文件保存器
type JavaFileSaver struct {
}

func init() {
	FileSaverMap[LangJava] = &JavaFileSaver{}
}

func (g *JavaFileSaver) GenFile(ctx *Context, tf *config.TemplateFile, content string) error {

	// 输出文件名
	fileName := tf.Name
	fn := ctx.Get("fileName")
	if fn != nil && fn.(string) != "" {
		fileName = fn.(string)
	}

	if fileName == "" {
		return fmt.Errorf("文件名不能为空: %s", tf.Path)
	}

	output := ctx.Tpl.Output
	if tf.Output != "" {
		output = tf.Output
	}

	pkg := getPackagePath(ctx, tf)
	if pkg != "" {
		output = fmt.Sprintf("%s%c%s", output, os.PathSeparator, pkg)
	}

	// 确保文件夹存在
	_, err := os.Stat(output)
	if os.IsNotExist(err) {
		err = os.MkdirAll(output, os.ModePerm)
	}
	if err != nil {
		return err
	}

	outFile := fmt.Sprintf("%s%c%s.%s", output, os.PathSeparator, fileName, tf.Suffix)
	err = os.WriteFile(outFile, []byte(content), 0644)
	if err != nil {
		return err
	}
	return nil
}
